package island.gotenyama.wand.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;

/**
 * 定数を表すクラス
 * 
 *
 * @author tk
 */
public final class Constants implements Serializable {

	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * エンコード方式
	 */
	public static final String DEFAULT_ENCODING = "UTF-8";

	/**
	 * 管理系ベースディレクトリ名
	 */
	public static final String ADMIN_BASE_NAME = "admin";

	/**
	 * Modelのキー値を設定
	 *
	 * @author tkawabata
	 */
	public enum ModelKey {

		/**
		 * エラーメッセージキーリスト
		 */
		ERROR_MSG_KEY_LIST("ModelKey.ERROR_MSG_KEY_LIST");

		/**
		 * キー値
		 */
		public String value;

		/**
		 * コンストラクタ
		 *
		 * @param value 値
		 */
		private ModelKey(String value) {
			this.value = value;
		}
	}

	/**
	 * Velocityページフォルダ
	 */
	public static final String VELOCITY_PAGE_FOLDER = "/WEB-INF/pages";

	/**
	 * 未来年の表示期間[3年先]
	 */
	public static final int FATURE_YEAR_COUNT = 3;

	/**
	 * 月のリスト
	 */
	public static final Collection<String> MONTH_LIST;

	/**
	 * 日のリスト
	 */
	public static final Collection<String> DAY_LIST;

	/**
	 * 時間のリスト
	 */
	public static final Collection<String> TIME_LIST;

	static {

		// 月リストの取得
		Collection<String> monthList = new ArrayList<String>(12);
		for (int i = 1; i <= 12; i++) {
			if (i < 10) {
				monthList.add("0" + i);
			} else {
				monthList.add("" + i);
			}
		}
		MONTH_LIST = Collections.unmodifiableCollection(monthList);

		// 日リストの取得
		Collection<String> dayList = new ArrayList<String>(31);
		for (int i = 1; i <= 31; i++) {
			if (i < 10) {
				dayList.add("0" + i);
			} else {
				dayList.add("" + i);
			}
		}
		DAY_LIST = Collections.unmodifiableCollection(dayList);

		// 時間リストの取得
		Collection<String> timeList = new ArrayList<String>(31);
		for (int i = 1; i <= 24; i++) {
			if (i < 10) {
				timeList.add("0" + i);
			} else {
				timeList.add("" + i);
			}
		}
		TIME_LIST = Collections.unmodifiableCollection(timeList);
	}

	// -----------------------------------------------------------------
	// GETTER
	// -----------------------------------------------------------------

	public static String getPageFolder() {
		return VELOCITY_PAGE_FOLDER;
	}

	public static Collection<String> getFatureYearList() {
		Collection<String> fatureYearList = new ArrayList<String>(FATURE_YEAR_COUNT);
		Calendar cal = Calendar.getInstance();
		int yyyy = cal.get(Calendar.YEAR);
		for (int i = 0; i < FATURE_YEAR_COUNT; i++) {
			fatureYearList.add("" + (yyyy + i));
		}
		return fatureYearList;
	}

	public static Collection<String> getMonthList() {
		return MONTH_LIST;
	}

	public static Collection<String> getDayList() {
		return DAY_LIST;
	}

	public static Collection<String> getTimeList() {
		return TIME_LIST;
	}
}
